
#ifndef __GEOMTREE_TRAVERSEUTIL_H
#define __GEOMTREE_TRAVERSEUTIL_H

#include "shared_ptr.h"
#include <string>
#include <map>
class CGeomNode;

struct GeomTreeTraverseUtil
{
	static void		FindTreeNodeByName( const shared_ptr<CGeomNode>& pParent, const char* lpszNodeName, std::map<long long, shared_ptr<CGeomNode>>& mapNode );

	static shared_ptr<CGeomNode> FindTreeNodeByNodeName( const shared_ptr<CGeomNode>& pParent, const char* lpszNodeName );

	static void		FindAllBuildingStoreyNode( const shared_ptr<CGeomNode>& pProject, std::map<long long, shared_ptr<CGeomNode>>& mapStorey );

	//static void		FindAllBuildingStoreyNodeByHeight( const shared_ptr<CGeomNode>& pProject, const shared_ptr<ReaderWriterIFC>& pRW, std::vector<shared_ptr<CGeomNode>>& vStorey, std::vector<double>& vHeight );

	static void		FindBuildingElementNodesOnStorey( const shared_ptr<CGeomNode>& pStorey, const char* lpszElementName, std::map<long long,shared_ptr<CGeomNode>>& mapElement );

	//static shared_ptr<IfcPPEntity>		TreeNodeToIfcProduct( const shared_ptr<ReaderWriterIFC>& pRW, const shared_ptr<CGeomNode>& pNode );

	static std::string NodeNameToProductName( const shared_ptr<CGeomNode>& pNode );

	static std::string NodeNameToProductName( const std::string& strNodeName );

	static long long NodeNameToProductID( const std::string& strNodeName );
};

#endif		//__GEOMTREE_TRAVERSEUTIL_H